package org.liuwei.concucrent.base02_cas.AtomicIntegerArray_06;

import java.util.concurrent.atomic.AtomicIntegerArray;

/**
 * 
 * @Title: AtomicIntegerArrayDemo.java
 * @Package org.liuwei.concucrent.base02_cas.AtomicIntegerArray_06
 * @Description: TODO(支持无锁的数组)
 * @author 刘伟 15818570028@163.com
 * @date 2016年8月18日 下午10:56:50
 * @version V1.0
 */
public class AtomicIntegerArrayDemo {
	static AtomicIntegerArray arr = new AtomicIntegerArray(10);

	public static void main(String[] args) throws InterruptedException {
		Thread[] ts = new Thread[10];

		for (int k = 0; k < 10; k++) {
			ts[k] = new Thread(new AddThread());
		}
		for (int k = 0; k < 10; k++) {
			ts[k].start();
		}
		for (int k = 0; k < 10; k++) {
			ts[k].join();
		}
		System.out.println(arr);
	}

	public static class AddThread implements Runnable {
		public void run() {
			for (int k = 0; k < 10000; k++)
				arr.getAndIncrement(k % arr.length());
		}
	}

	// 上述代码，申明了一个内含10个元素的数组。定义的线程对数组内10个元素进行累加操作，
	// 每个元素各加1000次。开启10个这样的线程。因此，可以预测，如果线程安全，
	// 数组内10个元素的值必然都是10000。
	// 反之，如果线程不安全，则部分或者全部数值会小于10000。

}